<?php
/**
 * Clase para encapsular y abstraer el acceso a datos del usuario autenticado en el sistema.
 * @author vcardenas
 */
class App_User {
	
	private static $_loggedUser     = null;
	
	public function __construct() {
		throw new Exception("La clase App_User no debe ser instanciada. Utilice sus metodos de manera estatica.");
	}
	
    private static function inicializar() {
        if (null === self::$_loggedUser) {
        	self::$_loggedUser = new Zend_Session_Namespace("loggedUser");
        }
    }
    
    /**
     * Indica si existe un usuario autenticado en el sistema
     * @return true|false
     */
    public static function isLogged() {
    	return Zend_Auth::getInstance()->hasIdentity();
    }
    
    /**
     * Obtiene el codigo del usuario autenticado en el sistema
     * @return integer o null si no hay un usuario autenticado
     */
    public static function getCodigoUsuario() {
    	if (Zend_Auth::getInstance()->hasIdentity()) {
    		return Zend_Auth::getInstance()->getIdentity()->codusuario;
    	}
        return null;
    }
    
    /**
     * Obtiene el nombreusuario del usuario autenticado en el sistema
     * @return string o null si no hay un usuario autenticado
     */
    public static function getNombreUsuario() {
    	if (Zend_Auth::getInstance()->hasIdentity()) {
    		return Zend_Auth::getInstance()->getIdentity()->nombreusuario;
    	}
        return null;
    }
    
	/**
     * Obtiene los nombres del usuario autenticado en el sistema
     * @return string o null si no hay un usuario autenticado
     */
    public static function getNombres() {
    	if (Zend_Auth::getInstance()->hasIdentity()) {
    		return Zend_Auth::getInstance()->getIdentity()->nombres;
    	}
        return null;
    }
    
	/**
     * Obtiene los apellidos del usuario autenticado en el sistema
     * @return string o null si no hay un usuario autenticado
     */
    public static function getApellidos() {
    	if (Zend_Auth::getInstance()->hasIdentity()) {
    		return Zend_Auth::getInstance()->getIdentity()->apellidos;
    	}
        return null;
    }
    
	/**
     * Obtiene el nombre completo (nombres y apellidos) del usuario autenticado en el sistema
     * @return string o null si no hay un usuario autenticado
     */
    public static function getNombreCompleto() {
    	if (Zend_Auth::getInstance()->hasIdentity()) {
    		return Zend_Auth::getInstance()->getIdentity()->nombres ." ". Zend_Auth::getInstance()->getIdentity()->apellidos;
    	}
        return null;
    }
    
	/**
	 * Obtiene el código del rol con el que el usuario se encuentra
	 * autenticado
	 * @return integer o null si no hay un usuario autenticado
	 */
    public static function getCodigoRol() {
		self::inicializar();
		if(isset(self::$_loggedUser->codrol)) {
		    return self::$_loggedUser->codrol;
		}
		return null;
	}
	
	/**
	 * Obtiene el código del rol padre con el que el usuario se encuentra
	 * autenticado
	 * @return integer o null si no hay un usuario autenticado
	 */
    public static function getCodigoPadreRol() {
		self::inicializar();
		if(isset(self::$_loggedUser->codpadrerol)) {
		    return self::$_loggedUser->codpadrerol;
		}
		return null;
	}
	
	/**
	 * Obtiene el nombre del rol con el que el usuario se encuentra
	 * autenticado
	 * @return string o null si no hay un usuario autenticado
	 */
	public static function getNombreRol() {
		self::inicializar();
		if(isset(self::$_loggedUser->nombrerol)) {
		    return self::$_loggedUser->nombrerol;
		}
		return null;
	}
	
	/**
	 * Obtiene el código de la sede con la que el usuario se encuentra asociado
	 * @return integer o null si no hay un usuario autenticado, o no tiene asociada alguna sede
	 */
    public static function getCodigoSede() {
		self::inicializar();
		if(isset(self::$_loggedUser->codsede)) {
		    return self::$_loggedUser->codsede;
		}
		return null;
	}
	
	/**
	 * Obtiene el nombre de la sede con la que el usuario se encuentra asociado
	 * @return string o null si no hay un usuario autenticado, o no tiene asociada alguna sede
	 */
	public static function getNombreSede() {
		self::inicializar();
		if(isset(self::$_loggedUser->nombresede)) {
		    return self::$_loggedUser->nombresede;
		}
		return null;
	}
	
	/**
	 * Obtiene el tipo de usuario de la sede con la que el usuario se encuentra asociado
	 * @return string o null si no hay un usuario autenticado, o no tiene asociada alguna sede
	 */
	public static function getTipoUsuarioSede() {
		self::inicializar();
		if(isset(self::$_loggedUser->tipousuario)) {
		    return self::$_loggedUser->tipousuario;
		}
		return null;
	}

    /**
     * Indica si el usuario autenticado en el sistema, tiene rol sede
     * @return true|false
     */
    public static function isSede() {
        $domConfig = Zend_Registry::get("domConfig");
        self::inicializar();
        if(self::$_loggedUser->codpadrerol == Roles_Model_Roles::CODPADRE_SEDE) {
            return true;
        }
        return false;
    }

}//fin de la clase
